﻿#ifndef SHAREDMEMORY_H
#define SHAREDMEMORY_H
#include "card/libcard.h"
union u_out_mx
{
    struct
    {
        short MX[64];	//充电输出电压
                //充电输出电流
                // SOC
                //电池组最低温度
                //电池组最高温度
                //单体电池最高电压
                //单体电池最低电压
                //充电机环境温度
                //充电导引电压
                // BMS 需求电压
                // BMS 需求电流
                // 充电模式
                //BMS 充电电压测量值
                //BMS 充电电流测量值
                // 估算剩余充电时间
                //充电接口温度探头 1 温度(接口 1 DC+)
                // 充电接口温度探头 2 温度(接口 1 DC-)
                // 充电接口温度探头 3 温度(接口 2 DC+)
                //充电接口温度探头 4 温度(接口 2 DC+)
                //备用
                //...
                //备用
    } dc;
    struct
    {
        short MX[48];	//当前 A 相电压   0
                //当前 B 相电压                   1
                //当前 C 相电压                    2
                //当前 A 相电流                    3
                //当前 B 相电流                    4
                //当前 C 相电流                    5
                //充电导引电压                     6
                //输出 PWM 占空比              7
                //充电接口温度探头 1 温度(接口 1 DC+)           8
                // 充电接口温度探头 2 温度(接口 1 DC-)             9
                // 充电接口温度探头 3 温度(接口 2 DC+)           10
                //充电接口温度探头 4 温度(接口 2 DC+)             11

                //备用
                //...
                //备用
    } ac;
};


typedef struct
{
    char  flag_change;//修改标志  初始化为0  由UI设置为1，主控程序处理后置0
    char pileCode[16];//桩编码;
     char propertyCode[64];//资产码
    unsigned  char ip[4];  //远程IP1
    unsigned int	 port; //远程端口1

    unsigned int MaxV; //最大电压 保留小数点1位
    unsigned int MaxI;  //最大电流 保留小数点2位

}sysset_cmd; //系统设置
//typedef struct
//{
//	char guntab; //充电接口标识
//	char meter_state;  //电表通信状态
//	char charge_state;//充电状态 ,0未充电，1正在充电，2充电结束,3 请求开始充电
//	//char rate_no;//当前费率编号
//	int  errcode; //，0 枪正常，其他:错误代码
//	int  gun_conn_state;//枪连接状态
//	union u_out_mx   u2;  //充电桩遥测
//	unsigned int  curcostmoney;//当前累计消费  保留小数点2位
//	unsigned int  cost_elec;//当前电费  保留小数点2位
//	unsigned int  cost_server;//当前服务费  保留小数点2位
//	unsigned int  charge_duration;//充电持续时间
//	unsigned int rate;//充电单价 保留小数点2位
////	unsigned int rate_mymy[7];//充电单价 保留小数点2位
//    unsigned int rate_server;//服务费单价 保留小数点2位
////	unsigned int curkWh[5];//总、尖、峰、平、谷电量  保留小数点2位
//	unsigned int pw;//总功率 保留小数点4位
//
//} gun_info; //充电枪信息

typedef struct
{
    char guntab; //充电接口标识
    char meter_state;  //电表通信状态
    char charge_state;//充电状态 ,0未充电，1正在充电，2充电结束未拔枪 ,3 请求开始充电 4 充电结束
    char stopreason;   //充电停止原因
    //1本地刷卡终止，2远程终止充电，3充满自动停止，4余额不足，5充电桩故障，6 BMS故障 	7、急停按钮停止  8 计费模型未设置 255 其他，
    int m_stopReason;//停止原因详细信息
    unsigned char   errcode[11]; //，第一个字节 错误个数 1~11 错误代码
    int  gun_conn_state;//枪连接状态
    union u_out_mx   u2;  //充电桩遥测
    unsigned int  curcostmoney;//当前累计消费  保留小数点2位
    unsigned int  cost_elec;//当前电费  保留小数点2位
    unsigned int  cost_server;//当前服务费  保留小数点2位
    unsigned int  charge_duration;//充电持续时间
    unsigned int rate;//充电单价 保留小数点2位
    unsigned int rate_server;//服务费单价 保留小数点2位
    unsigned int curkWh;//总电量  保留小数点2位
    unsigned int pw;//总功率 保留小数点4位

} gun_info; //充电枪信息
//1:   设备未连接；
//2：设备连接故障
//3：BMS通信故障
//4：SM4密钥错误
//5：计费模型异常
//6：余额不足
//7：启动超时
//8：急停开关按下
//9：充电桩设备故障
//10：BMS异常
//11：绝缘异常
//12：接触器合闸失败
///////////////////////////
//13:   设备正在充电
//14:   设备未准备好
//255: 其他
//typedef struct
//{
//    char  state; //请求状态，0 空闲，1 请求到达
//    char  guntab; //充电接口标识
//    unsigned char  UIDLen;  //卡号长度
//    char cardNUM[16]; //卡号
//    char  mod; //充电模式 00：自动充满；01：按电量；02：按时间；03：按金额
//    unsigned int   value; //充电参数
//    unsigned int  available_money;//卡余额
//    char  check_result; //卡片认证状态，0 未处理，1 认证成功， 2认证失败
//    char result;//UI-->0(init), MainControl--->1(Success with Charge) ,MainControl--->2(Failure with Charge);
//    unsigned char fail_Reason;
//
//}checkcard_cmd; //验证卡命令



typedef struct
{
    char  state; //请求状态，0 空闲，1 请求到达
    char  guntab; //充电接口标识
    unsigned char  UIDLen;  //卡号长度
    char cardNUM[16]; //卡号
    char  mod; //充电模式 00：自动充满；01：按电量；02：按时间；03：按金额
    unsigned int   value; //充电参数
    unsigned int  available_money;//卡余额
    char  check_result; //卡片认证状态，0 未处理，1 认证成功， 2认证失败
    char result;//UI-->0(init), MainControl--->1(Success with Charge) ,MainControl--->2(Failure with Charge);
    unsigned char fail_Reason;
     char ctrlMode;//0-normal; 1-comb;

     unsigned char cardtype;//卡类型  1:羊城通

//#ifdef YCC_CLIENT
     yct_rf_consum_card yct_car_para;
//#endif
}checkcard_cmd; //验证卡命令
typedef struct {
    char state; //充电方式 0 刷卡  1 APP
    char guntab; //充电接口标识
    char stopcode[8]; //停止充电验证码
} appcharg_cmd; //app充电命令


typedef struct
{
    char  req_state;   //请求状态，0 空闲，1 请求到达
    char  guntab; //充电接口标识
    char   result; // 发起充电时由UI写入0 ,由主控写入命令返回结果 1成功，2失败
    char  stopReason;//0--Card; 1--CardError
}endcharg_cmd; //结束充电命令
// 功率调节指令参数类型分为： 绝对值和百分比两种。
//01H： 功率绝对值， 输出值=功率调节参数值；    02H： 百分比， 输出值=最大输出功率×百分比。
//01：绝对值，数据分辨率：0.1kWh/位，偏移量：-1000.0kWh，数据范围：-1000.0kWh~+1000.0kWh
//02：百分比，数据分辨率：1%/位，偏移量：0%，数据范围：0~100%
typedef struct
{
    char  req_state;   //请求状态，0 空闲，1 请求到达
    char  guntab; //充电接口标识
    char   ctrltype;
     int     ctrlvaule;//
     char   result; // 发起充电时由UI写入0 ,由主控写入命令返回结果 1成功，2失败
}adjuctpw; //调节功率指令

typedef struct
{
    char  req_state;   //请求状态，1设置 由主控发起  0设置完成 UI改变完成
    char  guntab; //充电接口标识
    char   qrCode[256];//ascii

}setQRCode; //设置二维码指令
typedef struct
{
    char req_state; //请求状态, 1请求Vin模式
    char guntab;
}VinMod;
typedef struct
{
    //以下信息由主控程序负责更新，UI界面读取
    char  net_state; //网络状态 0 离线，1 在线
    char  update_state;//升级状态 0 没有  1 正在升级
    char can_state[8];//can通信口状态  0 can通信正常  1 心跳中断 2遥测超时 3 摇信超时
    char devtype; //充电机类型,1是直流，2是交流
    char gunnum;//枪个数
    gun_info  gunmsg[8]; //每个枪信息

    //以下信息原始值由主控提供，由UI改变
    sysset_cmd  	   cmd1; //参数设置命令

    //以下信息由UI界面负责更新，主控程序负责读取

    checkcard_cmd  cmd2[8]; //从UI收到的充电命令
    appcharg_cmd   cmd3[8]; //APP充电命令
    endcharg_cmd   cmd4[8]; //结束充电命令
//#ifdef CTRL_PW_ENABLE
    adjuctpw   cmd5[8];  //调节功率指令
    setQRCode cmd6[8];//设置二维码命令
    VinMod cmd7[8]; //VIN请求

//#endif
} chargpile_data;//共享内存数据结构
#endif // SHAREDMEMORY_H
